package setting

import (
	"service/api/setting/login"
	"service/api/setting/sys"
	"service/api/setting/tool"
	"service/conf"
	"service/ctrl"
	"service/model/mod"

	"gitee.com/cloudapex/permit"
	"gitee.com/cloudapex/ulern/htp"
	"github.com/gin-gonic/gin"
)

func init() {
	ctrl.Svr.RegistRouter(func(r *gin.Engine) {
		g := r.Group("setting")

		userRouter(g)
		menuRouter(g)
		roleRouter(g)
		groupRouter(g)
		loginRouter(g)
		toolRouter(g)
	})
}

func userRouter(r *gin.RouterGroup) {
	gr := r.Group("user")
	gr.Use(htp.MH_JWTAuthed(mod.MH_AUTH))

	gr.GET("uNameMatch", // 用户名模糊匹配
		func(c *gin.Context) { htp.Service(c, &sys.UNameMatch{}) })

	gr.Use(permit.MH_Permit(mod.RDB(mod.ERDB_Permt), conf.Main.AdminIds()))

	gr.GET("list", // 用户列表
		func(c *gin.Context) { htp.Service(c, &sys.UserList{}) })
	gr.POST("add", // 新增用户
		func(c *gin.Context) { htp.Service(c, &sys.UserAdd{}) })
	gr.POST("upd", // 编辑用户
		func(c *gin.Context) { htp.Service(c, &sys.UserUpd{}) })
	gr.POST("sta", // 更改用户状态
		func(c *gin.Context) { htp.Service(c, &sys.UserSta{}) })
	gr.POST("pwd", // 重置密码
		func(c *gin.Context) { htp.Service(c, &sys.UserPwd{}) })
	// gr.POST("del", // 删除用户
	// 	func(c *gin.Context) { htp.Service(c, &sys.UserDel{}) })
	gr.GET("choice", // 获取用户的组织角色
		func(c *gin.Context) { htp.Service(c, &sys.UserChoice{}) })
	gr.POST("choose", // 修改用户的组织角色
		func(c *gin.Context) { htp.Service(c, &sys.UserChoose{}) })
	gr.GET("permis", // 获取用户的权限信息
		func(c *gin.Context) { htp.Service(c, &sys.UserPermis{}) })
}

func menuRouter(r *gin.RouterGroup) {
	gr := r.Group("menu")
	gr.Use(htp.MH_JWTAuthed(mod.MH_AUTH))
	gr.Use(permit.MH_Permit(mod.RDB(mod.ERDB_Permt), conf.Main.AdminIds()))
	gr.GET("list", // 菜单列表
		func(c *gin.Context) { htp.Service(c, &sys.MenuList{}) })
	gr.GET("tree", // 菜单树表
		func(c *gin.Context) { htp.Service(c, &sys.MenuTree{}) })
	gr.POST("add", // 新增菜单
		func(c *gin.Context) { htp.Service(c, &sys.MenuAdd{}) })
	gr.POST("upd", // 编辑菜单
		func(c *gin.Context) { htp.Service(c, &sys.MenuUpd{}) })
	gr.POST("del", // 删除菜单
		func(c *gin.Context) { htp.Service(c, &sys.MenuDel{}) })
}

func roleRouter(r *gin.RouterGroup) {
	gr := r.Group("role")
	gr.Use(htp.MH_JWTAuthed(mod.MH_AUTH))
	gr.Use(permit.MH_Permit(mod.RDB(mod.ERDB_Permt), conf.Main.AdminIds()))
	gr.GET("kind", // 角色种类
		func(c *gin.Context) { htp.Service(c, &sys.MenuKind{}) })
	gr.GET("list", // 角色列表
		func(c *gin.Context) { htp.Service(c, &sys.RoleList{}) })
	gr.GET("labs", // 角色简列
		func(c *gin.Context) { htp.Service(c, &sys.RoleLabs{}) })
	gr.POST("add", // 新增角色
		func(c *gin.Context) { htp.Service(c, &sys.RoleAdd{}) })
	gr.POST("upd", // 编辑角色
		func(c *gin.Context) { htp.Service(c, &sys.RoleUpd{}) })
	gr.POST("del", // 删除角色
		func(c *gin.Context) { htp.Service(c, &sys.RoleDel{}) })
	gr.GET("choice", // 获取角色权限
		func(c *gin.Context) { htp.Service(c, &sys.RoleChoice{}) })
	gr.POST("choose", // 修改角色权限
		func(c *gin.Context) { htp.Service(c, &sys.RoleChoose{}) })
}

func groupRouter(r *gin.RouterGroup) {
	gr := r.Group("group")
	gr.Use(htp.MH_JWTAuthed(mod.MH_AUTH))
	gr.Use(permit.MH_Permit(mod.RDB(mod.ERDB_Permt), conf.Main.AdminIds()))
	gr.GET("list", // 用户组列表
		func(c *gin.Context) { htp.Service(c, &sys.GroupList{}) })
	gr.GET("tree", // 用户组树表
		func(c *gin.Context) { htp.Service(c, &sys.GroupTree{}) })
	gr.POST("add", // 新增用户组
		func(c *gin.Context) { htp.Service(c, &sys.GroupAdd{}) })
	gr.POST("upd", // 编辑用户组
		func(c *gin.Context) { htp.Service(c, &sys.GroupUpd{}) })
	gr.POST("del", // 删除用户组
		func(c *gin.Context) { htp.Service(c, &sys.GroupDel{}) })
	gr.GET("choice", // 获取用户组权限
		func(c *gin.Context) { htp.Service(c, &sys.GroupChoice{}) })
	gr.POST("choose", // 修改用户组权限
		func(c *gin.Context) { htp.Service(c, &sys.GroupChoose{}) })
}

func loginRouter(r *gin.RouterGroup) {
	gr := r.Group("login")
	gr.Use(htp.MH_JWTAuthed(mod.MH_AUTH))

	gr.GET("permis", // 登陆时权限列表(UI)
		func(c *gin.Context) { htp.Service(c, &login.MyPermis{}) })
}
func toolRouter(r *gin.RouterGroup) {
	gr := r.Group("tool")
	gr.Use(htp.MH_JWTAuthed(mod.MH_AUTH))
	gr.Use(permit.MH_Permit(mod.RDB(mod.ERDB_Permt), conf.Main.AdminIds()))

	gr.GET("cache_role", // 角色缓存数据
		func(c *gin.Context) { htp.Service(c, &tool.CacheRole{}) })
	gr.GET("cache_route", // 路由缓存数据
		func(c *gin.Context) { htp.Service(c, &tool.CacheRoute{}) })
	gr.POST("cache_reset", // 重置路由缓存数据
		func(c *gin.Context) { htp.Service(c, &tool.CacheReset{}) })
}
